From ef4abe73e1a406fa1a9733324d1d5224241db38b Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 31 May 2012 10:15:42 +0200 Subject: [PATCH] x86/amd: re-enable CPU topology extensions in case BIOS has disabled it BIOS will switch off the corresponding feature flag on family 15h models 10h-1fh non-desktop CPUs. The topology extension CPUID leafs are required to detect which cores belong to the same compute unit. (thread siblings mask is set accordingly and also correct information about L1i and L2 cache sharing depends on this). W/o this patch we wouldn't see which cores belong to the same compute unit and also cache sharing information for L1i and L2 would be incorrect on such systems. Signed-off-by: Andreas Herrmann Signed-off-by: Jan Beulich Acked-by: Keir Fraser Committed-by: Jan Beulich --- xen/arch/x86/cpu/amd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 9558d692e3..b8c3a32480 100644 --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -471,6 +471,21 @@ static void __devinit init_amd(struct cpuinfo_x86 *c) } } + /* re-enable TopologyExtensions if switched off by BIOS */ + if ((c->x86 == 0x15) && + (c->x86_model >= 0x10) && (c->x86_model <= 0x1f) && + !cpu_has(c, X86_FEATURE_TOPOEXT) && + !rdmsr_safe(MSR_K8_EXT_FEATURE_MASK, value)) { + value |= 1ULL << 54; + wrmsr_safe(MSR_K8_EXT_FEATURE_MASK, value); + rdmsrl(MSR_K8_EXT_FEATURE_MASK, value); + if (value & (1ULL << 54)) { + set_bit(X86_FEATURE_TOPOEXT, c->x86_capability); + printk(KERN_INFO "CPU: Re-enabling disabled " + "Topology Extensions Support\n"); + } + } + amd_get_topology(c); /* Pointless to use MWAIT on Family10 as it does not deep sleep. */ -- 2.30.2